//
//  ProblemMS0104.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/5/4.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 面试题 01.04. 回文排列
 给定一个字符串，编写一个函数判定其是否为某个回文串的排列之一。

 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

 回文串不一定是字典当中的单词。

 示例1：

 输入："tactcoa"
 输出：true（排列有"tacocat"、"atcocta"，等等）
 */
@objcMembers class ProblemMS0104: NSObject {
    func solution() {
        print(canPermutePalindrome("tactcoa"))
        print(canPermutePalindrome("AaBb//a"))
    }
    
    /*
     回文中不同字符的个数为奇数的个数只能有一个
     */
    func canPermutePalindrome(_ s: String) -> Bool {
        if s.count <= 1 {
            return true
        }
        var charts:[UInt8:Int] = [:]
        for c in s {
            charts[c.asciiValue!, default: 0] += 1
        }
        var n = 0
        for (c, cn) in charts {
            if cn % 2 == 1 {
                n += 1
                if n > 1 {
                    return false
                }
            }
            
        }
        return true
    }
}
